<?php defined('SYSPATH') or die('No direct script access.');


class Controller_Usermanagement extends Controller_Main {

    public function action_index(){
        $this->request->redirect('usermanagement/list');
    }

    public function action_list(){
        $this->template->content = View::factory('usermanagement/user_list');
        $user_model = ORM::factory('user');

        $list = $user_model->getFullList();
        $this->template->content->list = $list;
        
    }

    public function action_add_user(){
        $this->template->content = View::factory('usermanagement/add_user');
        $user_model = Model::factory('user');

        $id = Request::current()->param('id');
        $this->template->content->id=$id;
        $auth = Auth::instance();

        $roles=$user_model->getAllRoles();
        $this->template->content->roles = $roles;
        
        if(Request::g('status')=='save_success'){
            $this->template->content->sukces='Zapisano pomyślnie';
        }
        

        if($id){
            $user = ORM::factory('user', $id);
        }else{
            
        }

        if($id){
            $data = $user->as_array();

            $user_roles = $user->getRoles();
            $this->template->content->data=$data;
            $this->template->content->user_roles=$user_roles;
        }


        if(strtolower($_SERVER['REQUEST_METHOD']) == 'post'){

            $walidacja = new Validation(array(
                'username'=>$_POST['username'],
                'email'=>$_POST['email'],
                'password'=>$_POST['password'],
                'password_confirm'=>$_POST['password_confirm'],
            ));
            $walidacja->rule('username', 'not_empty')
                    ->rule('username', 'alpha_dash')
                    ->rule('email', 'not_empty')
                    ->rule('email', 'email');
            
            $password_walidacja = new Validation(array(
                'password'=> $_POST['password'],
                'password_confirm'=>$_POST['password_confirm'],
            ));
            
            try {

                if ($walidacja->check()) {
                    if ($id) {
                        
                    } else {
                        $user = ORM::factory('user');
                    }

                    $user->username = $_POST['username'];
                    $user->email = $_POST['email'];
                    if (Request::g('change_pass') || !$id) {
                        $password_walidacja->rule('password', 'not_empty')
                                ->rule('password_confirm', 'not_empty')
                                ->rule('password', 'matches', array(':validation', 'password', 'password_confirm'))
                        ;
                        if($password_walidacja->check()){
                            $user->password = Request::g('password');
                        }else{
                            throw new Exception('Hasła się niezgadzają lub są nieprawidłowe. '.$password_walidacja);
                        }
                        
                    }
                    $r = $user->save();
                    $id = $user->id;
                    if ($r) {       // save success
                        if ($id) {
                            $user->clearRoles();
                        }
                        
                        $roles = Request::g('roles');

                        if (is_array($roles) && count($roles) > 0) {
                            $rr = $user->addRoles($roles);
                        }
                    } else {
                        
                    }
                    
                    $this->request->redirect('usermanagement/add_user/' . $id . '?status=save_success');
                }else{
                    throw new Exception(''.$walidacja->errorsStr());
                }
            } catch (Exception $e) {
                $this->template->content->errorMessage = 'Save user fail. <br/>'.$e->getMessage().'<br/>';
            }
        }
    }

    public function action_register(){
        $this->template = View::factory('user/register'); //załadowanie widoku
        $auth = Auth::instance(); //utworzenie instancji obiektu Auth

        if ($auth->logged_in('login')){ //sprawdzanie czy użytkownik jest zalogowany
            $this->request->redirect('user/login'); //jeśli nie, przekierowujemy do logowania
        }else{
            if($_POST){ //sprawdzanie czy dane są przesyłane POSTem
                $walidacja = new Validation(array(
                    'login'=>$_POST['login'],
                    'email'=>$_POST['email'],
                    'haslo'=>$_POST['haslo'],
                )); //tworzenie obiektu walidacji
                $walidacja->rule('login', 'not_empty')
                        ->rule('login', 'alpha_dash')
                        ->rule('email', 'not_empty')
                        ->rule('haslo', 'not_empty')
                        ->rule('email', 'email');

                try{
                    if($walidacja->check()){
                        $user = ORM::factory('user'); //tworzenie obiektu ORM z użyciem tabeli users

                        $user->username = $_POST['login']; //przypisanie pola z formularza do nazwy kolumny w tabeli
                        $user->email = $_POST['email'];
                        $user->password = $_POST['haslo'];

                    //instrukcja warunkowa/zapis danych użytkownika/przypisanie roli "login"
                    if($user->save() && $user->add('roles', ORM::factory('role', array('name' => 'login'))) ){
                        $this->template->sukces = 'Dziękujemy za rejestrację!'; //przekazanie zmiennej $sukces do widoku
                        $this->request->redirect('user/login');
                    }else{
                        $this->template->fail = 'Nie udało się dodać użytkownika!'; //przekazanie zmiennej $fail do widoku
                    }

                    }else{
                        $this->template->fail = 'Uzupełnij poprawnie formularz rejestracyjny!';
                    }
                }catch(Kohana_Exception $e){

//                    echo Debug::vars($_POST);
//                    echo Debug::vars($e->getMessage());
//                    echo Debug::vars($e->text($e));
                }
            }

        }
    }

    public function action_login(){
        $this->template = View::factory('user/login');
        $auth = Auth::instance(); //utworzenie instancji obiektu Auth


        if ($auth->logged_in('login')){ //sprawdzanie czy użytkownik jest zalogowany
            $this->request->redirect('page/index'); //jeśli jest, przekierowujemy do user
        }else{

            if($_POST){
                $walidacja = new Validation($_POST); //tworzenie obiektu walidacji
                $walidacja->rule('login', 'not_empty')
                        ->rule('haslo', 'not_empty');

                if($walidacja->check()){ //jeśli walidacja OK to zaloguj
                    $r=$auth->login($_POST['login'], $_POST['haslo'], FALSE); //logowanie użytkownika

                    if(!$r){
                        $this->template->fail = 'Login lub hasło są niepoprawne';
                    }else{
                        $this->request->redirect('user'); //przekierowanie po zalogowaniu do kontrolera user

                    }

                }else{
                    $this->template->fail = 'Login lub hasło są niepoprawne';
                }

        }

        }
    }

    public function action_logout(){
        $this->template = View::factory('user/login');
        $auth = Auth::instance(); //utworzenie instancji obiektu Auth
        if ($auth->logged_in('login')){ //sprawdzanie czy użytkownik jest zalogowany
            if($auth->logout(TRUE)){ //jeśli jest, to go wylogowujemy
                $this->template->sukces = 'Pomyślnie wylogowano!';
            }else{
                $this->request->redirect('user/login'); //przekierowujemy do logowania
            }
        }else{ //jeśli nie jest zalogowany przekierowujemy do logowania
            $this->request->redirect('user/login');
        }
    }



    public function after(){

        if ($this->auto_render){
            $styles = array(
                    'media/css/main_login.css' => 'screen, projection',
            );

            $this->template->title = "Sel Office - logowanie";
            $this->template->styles = $styles;
            $this->template->scripts = array();
        }

        parent::after();
    }

}